informatik_rwthfandomcom_de-20200214-history
Mikrocontroller
Mikrocontroller (µC, microcontroller unit: MUC) sind eigenständige, spezialisierte und kosteneffektive Geräte mit low-end Prozessor, Speicher und Peripherie. In einer Mikrokontrollerfamilie wird der gleiche Mikroprozesoor verwendet, es werden jedoch Wahlen verschiedener Speichergrößen, I/O-Fähigkeiten und weiterer Peripherie angeboten. Die Bestandteile eines Mikrocontroller teilen sich einen internen Bus. Ein Mikrocontroller hat einen Prozessor, flüchtigen und nicht-flüchtigen Speicher, eine Uhr (zusätzlich Counter und Timer) und einen Watchdog. Interaktion mit dem Controller sind über die externen Busse möglich, die sehr unterschiedlich ausfallen können. Interfaces Digital I/O Digitale I/O pins sind meist zu ports mit 8 pins gruppiert und sind bidirektional. Sie werden mit dem Data Direction Register (DDR), dem Port Register (PORT) und dem Port Input Register (PIN) konfiguriert. * DDR: Stellt ein, ob ein pin für in- oder output zuständig ist. * PORT: Stellt für einen output pin den output ein. Häufig wird für input pins ein pull up Widerstand eingestellt. * PIN: Nur Lesen der an den pins anliegenden Werte möglich. Ein pull up Widerstand sorgt dafür, dass eine Verbindung zu Masse besteht. Ansonsten könnte der Wert am Pegel undefiniert sein bzw. flackern, wenn kein Strom an ihn gelegt wird. Sampling Für inputs werden die Werte nur mit jedem Taktzyklus neu ausgelesen. Daher werden Signale, die kürzer als eine Taktzeit sind, möglicherweise nicht richtig erkannt. Ein weiteres Problem ist, dass durch die analoge Darstellung des Signals eine Grauzone entsteht, in der der Signalwert nicht mehr eindeutig zu interpretieren ist, weil er nah am Mittelwert liegt. Ein Schmitt-Trigger sorgt für Abhilfe, indem er sich gewissermaßen den letzten digitalen Zustand "merkt". Erst, wenn das Signal aus die Grauzone verlassen hat und eindeutig geworden ist, übernimmt der Schmitt-Trigger auch den digitalen Wert. Weiterhin muss Signalrauschen oder bouncing, welches Flackern beim Drücken oder Loslassen von Knöpfen ist, zur Störungsvermeidung herausgefiltert werden. Diese Effekte können auf der Hardware durch Tiefpass- oder Rauschfilter gelöst werden, oder in der Software mittels mehrfachen Abfragen des Wertes. Analog Digital zu analog Durch einen Tiefpassfilter und PWM lassen sich digitale Werte analog ausgeben. Dabei sorgt ein Kondensator für die Glättung des rechteckigen PWM-Signals. Diese Methode ist einfach und günstig, jedoch bietet sie eine schlechte Qualität und hat eine Anfangsverzögerung durch die Aufladezeit des Kondensators. Eine binär gewichtete Widerstandsschaltung nutzt Widerstände, deren Werte sich von einem zum anderen halbieren. Diese Methode ist sehr schnell, würde jedoch sehr präzise Widerstände benötigen. Abhilfe schafft die R-2R Leiter, bei denen sogar nur ein Typ Widerstand verwendet werden kann. Allerdings werden dann sehr viele Widerstände benötigt. Analog zu digital Bei der Quantisierung der analogen Signale entsteht ein Fehler von maximal einem halben least significant bit (LSB). Lineare Fehler können leicht korrigiert werden. Gain-Fehler können über eine eingebaute Korrektur behoben werden, differential non-linearity-Fehler (DNL) sind jedoch die schlimmste Abweichung. Ebenso muss nach dem Sampling-Theorem ein Signal mit einer maximalen Frequenz mit dem Doppelten dieser Frequenz abgetastet werden, um die Schwingungen korrekt erkennen zu können. Ein wichtiger Baustein ist ein analoger Komparator, der zwei Eingänge vergleicht und ausgibt, ob der erste größer ist, oder nicht. Mehrere solcher Komparatoren können zu einem flash converter zusammengeschlossen werden, sodass sie die Eingangsspannung mit den Grenzspannungen vergleichen, die die Bitgrenzen darstellen. Dadurch ergeben die Komparatoren direkt die binäre Repräsentation des Signals. Aufgrund der Menge an benötigten Komparatoren sind diese Bauteile aber sehr teuer. Ein tracking converter benutzt nur einen Komparator und nähert sich schrittweise der Eingangsspannung, indem er den aktuell ermittelten Wert über einen digital/analog-Wandler ausgibt und vergleicht. Eine Verbesserung ist der successive approximation counter, der nach dem Verfahren der binären Suche arbeitet, statt in Bitintervallen zu suchen. Die Eingangsspannung muss für dieses Verfahren allerdings während der Suche gleich bleiben. Daher wird ein sample and hold-Mechanismus benötigt, der mithilfe eines Kondensators die Eingangsspannung speichert und auf Bedarf wieder geben kann. Zudem gibt es den ramp compare converter, der ein Sägezahnsignal erzeugt, welches er mit der Eingangsspannung vergleicht. Sobald das Sägezahnsignal dieses übersteigt, feuert ein Komparator. Anhand der seit Beginn des Zahns vergangenen Zeit lässt sich die Stärke der Eingangsspannung ermitteln. Kommunikation Zur Kommunikation können die Busse in verschiedene Typen unterteilt werden. Parallele Busse sind eine Menge an Bussen, die zusammen für die Steuerung eines Peripheriegeräts zuständig sind. Jeder übernimmt dabei eine eigene Funktion und alle können im Prinzip parallel betrieben werden. Meistens sind jedoch gewisse Einschränkungen an das Timing der Signale gegeben. Bei seriellen Bussen steht nur eine Verbindung zur Verfügung, auf der die verschiedenen Funktionen dadurch realisiert werden, dass die Signale nacheinander auf den Bus gegeben werden und entsprechend verarbeitet werden. Damit sind weniger Verbindungen nötig als bei parallelen Architekturen. Zwei Systeme für serielle Busse sind das Serial Peripheral Interface (SPI) und das Inter-Integrated Circuit (I2C) System, wovon sich letzteres als Standard etabliert hat. Diese Systeme sind häufig auf den externen Peripheriegeräten implementiert. Auf dem Mikrocontroller selbst kann Universal Synchronous and Asynchronous serial Receiver and Transmitter (USART) verfügbar sein. Es kann für die Verbindung des Mikrocontrollers zu anderen Geräten verwendet werden. Programmierung Das Programm für einen Mikrocontroller wird meist auf einem separaten Entwicklungscomputer vorgenommen. Der entstandene Code für den Controller kann dann auf verschiedene Arten auf diesen übertragen werden. Es lässt sich ein externer Speicher verwenden, auf den der Programmcode gespielt wird. Der Speicher muss dann manuell mit dem Mikrocontroller verbunden werden. Die meisten Mikrocontroller haben jedoch einen internen Programmspeicher, der sich direkt programmieren lässt. Dazu lassen sich jedoch wiederum mehrere Verfahren einsetzen. Boot loader Ein boot loader ist Software auf dem Mikrocontroller, der das Herunterladen von Programmcode ermöglicht. Dieser kann den Mikrocontroller auch während der Programmausführung umprogrammieren. Dafür ist der Speicher in zwei Bereich geteilt, den read while write (RWW) und den no RWW, wobei letzterer das Programm des boot loaders enthält. Um den RWW umzuprogrammieren steht der store program memory (SPM) zur Verfügung, der nur vom boot loader aus benutzt werden kann. Der Zugriff auf SPM kann mittels boot lock bits verhindert werden. Diese sogenannten fuses lassen sich nach dem Setzen nicht mehr vom boot loader löschen und verhindern ein Überschreiben des Programms. Der boot loader kann auch eigene Interrupt Service Routinen im NRWW halten. Programmer Mittels eines in-system programmers (ISP) lässt sich das Programm direkt auf den Mikrocontroller übertragen. Dafür muss dieser ein entsprechendes Interface anbieten, an das der ISP anknüpfen kann. Debugger Zum Debuggen eines Programms ist es hilfreich, vom Mikrocontroller Informationen über dessen Register-, Speicher und andere Informationen Auskunft zu erhalten sowie Breakpoints setzen und Traces erhalten zu können. Diese Funktionalität kann prinzipiell ein boot loader bieten, indem die Verbindung, die zum Herunterladen des Programms, auch zum Zurücksenden von Informationen genutzt wird. Die Software muss diese Informationen jedoch selbst abrufen und verbraucht dabei CPU-Zeit. Eine andere Möglichkeit ist ein bus monitor, der alle Signale, die über den Bus laufen, als Debug-Info an den Entwicklerrechner sendet. Dafür muss jedoch der Bus über I/O pins des Mikrocontrollers zugänglich sein. Ein Emulator pod kann den Mikrocontroller für solche Zwecke ersetzen und bietet Zugriff auf alle Register, Speicher etc. Allerdings ist solches Equipment teuer. Günstiger ist ein JTAG, welches ein standardisiertes Debug-Interface ist. Die verfügbaren Optionen hängen vom verwendeten Mikrocontroller ab. Funktionen Interrupts Mikrocontroller haben häufig die Wahl zwischen Polling und Interrupts. Polling wird bei vorhersagbar oder sich regelmäßig ändernden Werten verwenden, wohingegen sich Interrupts für zeitkritische und unvorhersehbare Ereignisse eignen. Timer und counter Timer und counter sind dedizierte Hardware und daher als on chip peripherals realisiert. Ein counter zählt externe Ereignisse, wie beispielsweise die steigenden Flanken an einem pin. Ein timer zählt Taktzyklen, ist also ebenfalls ein counter. Die meisten Mikrocontroller bieten mehrere timer und counter mit unterschiedlichen Auflösungen an. Die Basis aller timer und counter ist ein Zählregister. Es gibt weitere Steuerregister, die sie starten und stoppen, Interrupts aktivieren und ausschalten, den Modus einstellen und bei timern prescaler einstellen, welche es ermöglichen, größere Zeitintervalle zu messen. Häufig gibt es auch ein compare Register. Gleicht dessen Wert dem des Zählregisters, können Interrupts ausgelöst werden. Die Anwendungen von timer und counter gehen über Zählen hinaus. Sie können input capture betreiben, sodass externe Ereignisse beispielsweise mit einem Zeitstempel versehen werden. Außerdem können sie output compare betreiben oder pulse width modulation (PWM) erzeugen. Der watchdog timer (WD) ist ein besonderer Timer, der für ein Zurücksetzen des Mikrocontrollers sorgt, falls dieser in eine Endlosschleife geraten sollte. Der WD setzt den Mikrocontroller zurück, sobald er auf 0 heruntergezählt hat. Daher muss das Programm den WD ständig zurücksetzen. Dies hilft zwar gegen Hänger des Programms, aber der watchdog-Mechanismus selbst kann durch die erzwungenen Neustarts zu Problemen führen. Referenzen Wenn nicht anders angegeben, stammen die Inhalte aus den Vorlesungsfolien: * Kowalewski, S.: Vorlesungsfolien "02_S16_ES_MicroControllers" ( ) Siehe auch Übersichtsseite von Einführung in eingebettete Systeme